/*
 * Copyright (c) China Telecom Cloud Technology Co., Ltd. 2024-2025. All rights reserved.
 */
#ifndef POSIX_STRATEGY_H
#define POSIX_STRATEGY_H

#include "FsStrategy.h"

class PosixStartegy final : public FsStrategy {
  public:
    PosixStartegy(std::string mountPath, // KV Cache存储根路径
              std::string path,          // 共享内存文件存路径
              void *addr)
        : FsStrategy(mountPath, path, addr) {}



    /**
     *! @brief  虚函数，从文件中读取KV Cache数据到Segment中
     * 
     * @param objId      KV Cache对象id(可能是哈希)
     * @param segment    存储读取后KV Cache数据的Segment
     * @param srcOffset  KV Cache存储文件的偏移量
     * @param dstOffset  Segment数据地址的偏移量
     * @param length     读取数据长度
     * 
     * @return int32_t   成功返货0否则返回具体错误码
     */
    int32_t get(const std::string &objId, 
              const Segment &segment,
              const uint64_t srcOffset, 
              const uint64_t dstOffset,
              const uint64_t length
            ) noexcept override;



    /**
     *! @brief  虚函数，将Segment中中的数据存储到具体的文件中
     * 
     * @param objId      KV Cache对象id(可能是哈希)
     * @param segment    存储读取后KV Cache数据的Segment
     * @param srcOffset  KV Cache存储文件的偏移量
     * @param dstOffset  Segment数据地址的偏移量
     * @param length     读取数据长度
     * 
     * @return int32_t   成功返货0否则返回具体错误码
     */
    int32_t put(const std::string &objId, 
              const Segment &segment,
              const uint64_t srcOffset, 
              const uint64_t dstOffset,
              const uint64_t length
            ) noexcept override;



    /**
     *! @brief 删除（驱逐）特定的KV Cache对应的文件
     * 
     * @param objId  KV Cache对象id(可能是哈希)
     * 
     * @return int32_t 成功返货0否则返回具体错误码
     */
    int32_t remove(const std::string &objId) noexcept override;



    /**
     *! @brief 判断某个对应的KV Cache文件是否存在
     * 
     * @param objId 
     * @return bool
     */
    bool isExist(const std::string &objId) noexcept override;
};

#endif